草庐IT

c++ - Lua C++ 表迭代

全部标签

c++ - 带有双端队列的随机访问迭代器的无效迭代器

我正在阅读ScottMeyers的有效STL。在项目1中,作者提到了如何在各种容器中进行选择,下面是我难以理解的文本片段。Woulditbehelpfultohaveasequencecontainerwithrandomaccessiteratorswherepointersandreferencestothedataarenotinvalidatedaslongasnothingiserasedandinsertionstakeplaceonlyattheendsofthecontainer?Thisisaveryspecialcase,butifit’syourcase,dequ

c++ - 预期指针错误 vector 的迭代器;

我正在使用一个指针vector来创建一个数据结构,但发现我收到了一个似乎不清楚的错误。这是头文件中的基本代码#includeusingnamespacestd;templateclassST{classSTNode{public:STNode(Keyk,Valuev):key(k),value(v){}~STNode(){}Keykey;Valuevalue;};typedeftypenameST::STNodeNode;public:ST():v(NULL){v=newvector();}~ST(){//vectorcontainsallocatedobjectsfor(vector

c++ - 如何在编译或运行时检测错误的迭代器使用

我刚刚在一些遗留代码中发现了对不同容器的迭代器之间的std::distance的严重滥用。包括代码之类的东西。现在恐怕有人可能在代码的其他部分犯了同样的错误。有没有办法在编译或运行时检测到这种错误?//badcodetoexplaintheproblemstd::vectorv1={1};autoiterv1=v1.begin();std::vectorv2=v1;intnDist=std::distance(v2.begin(),iterv1);//errordistancecalculatedbetween2containers 最佳答案

c++ - 将基于自定义模板的迭代器类的对象转换为 const_iterator

我正在大学学习OOP类(class)(C++是基础语言)。我的任务是实现自己的链表模板容器类。我几乎完全做到了,但遇到了问题。已知STL提供iterator和const_iterator通过列表进行迭代的类。它们具有几乎相同的实现,主要区别在于iterator的方法返回引用,而const_iterator的方法——常量引用。我关注了https://stackoverflow.com/a/3582733/2108548并创建了单独的模板类ListIterator.然后我用typedef声明类(class)Iterator和ConstIterator类内List.我有这样的东西:templ

c++ - 为什么删除元素的 std::for_each 不会中断迭代?

据我所知,在集合迭代期间删除元素会破坏迭代或导致您跳过元素。为什么使用删除的谓词调用std::for_each不会导致这种情况发生?(有效)。代码片段:#include#include#includeusingnamespacestd;intmain(){mapm;m[1]=5000;m[2]=1;m[3]=2;m[4]=5000;m[5]=5000;m[6]=3;//Eraseallelements>1000std::for_each(m.begin(),m.end(),[&](constdecltype(m)::value_type&v){if(v.second>1000){m.e

c++ - 傻瓜的迭代/动态拓扑排序

我目前正在用C++实现动态DAG图——它将通过UI显示给用户,节点/边的插入/删除将是常见操作。图表的规模可能从非常小的规模到很大的规模不等——我的目标是支持数百万个节点。因此,我正在寻找一种不会占用太多内存空间的最佳数据结构,同时也在寻找一种通过对拓扑排序的节点进行快速多线程迭代来快速插入/删除的方法(因此多个节点可以并行执行)。我还没有做任何分析,看看每次修改完成时重新计算完整图的拓扑排序的天真方法是否会削减它,但为了学习,我想我宁愿找到一种“更聪明”的方式。我不知道如何处理图的多线程迭代,但一开始我偶然发现了一些与迭代/动态拓扑排序步骤相关的论文,问题是它们是有点太聪明了,我无法

c++ - 迭代任意范围的 n 维数组的最快方法?

在C++中,我希望迭代一个n维数组,其范围分别从min[n]到max[n],并在整个过程中分别保持ord[n]中的纵坐标。即。通用解决方案:for(intx=0;x形式:intmin[n]{0,3,-2...}intmax[n]{10,20,5...}intord[n]{0,0,0...};intmaxIterations=(max[0]-min[0])*(max[1]-min[1])*....for(intiteration=0;iteration我能想到的iterate()最快的算法是:inlinevoiditerate(intdimensions,int*ordinates,in

C++:多态容器/迭代器与编译时概念/特征

背景这纯粹是为了教育目的。如果您不想阅读整个背景,可以跳到底部的问题。我已经编写了一个Queue接口(interface)(抽象类),以及2个基于调整大小的数组和链表的派生实现。templateclassIQueue{public:virtualvoidenqueue(Titem)=0;virtualTdequeue()=0;virtualboolisEmpty()=0;virtualintsize()=0;}templateclassLinkedListQueue:publicIQueue{...}templateclassResizingArrayQueue:publicIQueu

C++11 对模板参数类型的 vector 使用迭代器

这个问题在这里已经有了答案:WhereandwhydoIhavetoputthe"template"and"typename"keywords?(8个答案)关闭6年前。我有一个模板类,其中包含作为模板参数给出的类型的指针vector。我希望能够使用基于范围的迭代来迭代vector的有限部分。我的类包含以下功能:templateclassObjectList{...public://!Beginiterationoveralistofobjectsstd::vector::iteratorbegin();//!Iteratortoonepasttheendofthelistofobjec

C++ 随机访问迭代器超出范围

为了同时对两个范围进行分区或排序(与std::partition或std::sort仅对一个范围相反),同时仅考虑元素在比较第一个范围时,我创建了一个模板随机访问迭代器DualRandIt包装两个随机访问迭代器。#include//RandomAccessIteratorwrappingtwoRandomAccessIteratorstemplatestructDualRandIt{usingdifference_type=typenamestd::iterator>::difference_type;DualRandIt(RandIt1it1,RandIt2it2):it1(it1)